// 分支语句演示
void branchStatementsDemo() {
  print("\n=== 分支语句演示 ===");
  int age = 18;
  bool isStudent = true;

  // if 语句
  if (age >= 18) {
    print("成年人");
    if (isStudent) {
      print("但还是学生");
    }
  } else {
    print("未成年人");
  }

  // if-else if-else 链
  String grade = "B";
  if (grade == "A") {
    print("优秀");
  } else if (grade == "B") {
    print("良好"); // 输出
  } else {
    print("一般");
  }

  // 条件表达式（三元运算符）
  String message = age >= 18 ? "可以投票" : "不能投票";
  print("三元运算符: $message");

  // 级联条件（&& 和 ||）
  if (age >= 18 && !isStudent) {
    print("成年人且非学生");
  } else if (age < 18 || isStudent) {
    print("未成年人或学生");
  }

  // switch-case（注意：Dart 的 switch 必须覆盖所有可能情况，除非有 default）
  int day = 3;
  switch (day) {
    case 1:
      print("周一");
      break;
    case 2:
      print("周二");
      break;
    case 3:
      print("周三"); // 输出
      break;
    default: // 必须存在，除非所有情况已覆盖
      print("其他日期");
  }
}

// 循环语句演示
void loopStatementsDemo() {
  print("\n=== 循环语句演示 ===");
  List<String> fruits = ["苹果", "香蕉", "橙子"];
  Map<String, int> scores = {"Alice": 90, "Bob": 85, "Charlie": 95};

  // for 循环（索引遍历）
  print("\nfor 循环（索引）:");
  for (int i = 0; i < fruits.length; i++) {
    print("索引 $i: ${fruits[i]}");
  }

  // for-in 循环（集合遍历）
  print("\nfor-in 循环（集合）:");
  for (String fruit in fruits) {
    print(fruit); // 输出每个元素
  }

  // forEach 方法（更简洁的集合遍历）
  print("\nforEach 循环:");
  fruits.forEach((fruit) => print(fruit));

  // while 循环（条件循环）
  print("\nwhile 循环:");
  int count = 0;
  while (count < 3) {
    print("Count: $count"); // 输出 0, 1, 2
    count++;
  }

  // do-while 循环（至少执行一次）
  print("\ndo-while 循环:");
  int retry = 0;
  do {
    print("重试次数: $retry"); // 至少执行一次
    retry++;
  } while (retry < 2);

  // 循环中的 break 和 continue
  print("\nbreak 和 continue 演示:");
  for (int i = 0; i < 5; i++) {
    if (i == 2) {
      continue; // 跳过 i=2
    }
    if (i == 4) {
      break; // 终止循环
    }
    print("i: $i"); // 输出 0, 1, 3
  }

  // 遍历 Map
  print("\n遍历 Map:");
  scores.forEach((name, score) {
    print("$name: $score 分");
  });
}

void main() {
  branchStatementsDemo();
  loopStatementsDemo();
}
